// diff with file://./rxjs-case-WithLatestFrom.ts
import { of } from "rxjs";
import { combineLatestWith } from "rxjs/operators";

const source1$ = of("A", "B", "C");
const source2$ = of(1, 2, 3);

source1$.pipe(combineLatestWith(source2$)).subscribe(([val1, val2]) => {
  console.log(`CombineLatest: ${val1}, ${val2}`);
});

// 输出：
// CombineLatestWith: C, 1
// CombineLatestWith: C, 2
// CombineLatestWith: C, 3
// 实际上，由于 of 是同步发出所有值，所以会看到多个组合，
// 但注意 combineLatestWith 会等到每个 Observable 都至少有一个值后才开始发出。
// 具体输出：
// 当 source1$ 发出 'A'，此时 source2$ 还没有值（因为 of 是同步的，但 combineLatestWith 会等待两个都有值）
// 然后 source2$ 发出 1，此时 source1$ 的最新值是 'A'，所以输出 'A', 1
// 然后 source1$ 发出 'B'，此时 source2$ 最新是 1，输出 'B', 1
// 然后 source1$ 发出 'C'，输出 'C', 1
// 然后 source2$ 发出 2，输出 'C', 2
// 然后 source2$ 发出 3，输出 'C', 3
